home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume2 / puzzlet.ool < prev    next >
Encoding:
Internet Message Format  |  1987-11-30  |  23.9 KB

  1. Path: uunet!tektronix!tekgen!tekred!games-request
  2. From: games-request@tekred.TEK.COM
  3. Newsgroups: comp.sources.games
  4. Subject: v02i099:  puzzletool - a puzzle game for Sun workstations
  5. Message-ID: <1881@tekred.TEK.COM>
  6. Date: 1 Dec 87 01:26:35 GMT
  7. Sender: billr@tekred.TEK.COM
  8. Lines: 572
  9. Approved: billr@tekred.TEK.COM
  10.  
  11. Submitted by: Jiang-Hsing Chu <jchu@mimsy.umd.edu>
  12. Comp.sources.games: Volume 2, Issue 99
  13. Archive-name: puzzletool
  14.  
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then unpack
  18. # it by saving it into a file and typing "sh file".  To overwrite existing
  19. # files, type "sh file -c".  You can also feed this as standard input via
  20. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  21. # will see the following message at the end:
  22. #        "End of shell archive."
  23. # Contents:  README Makefile puzzletool.c puzzletool.h
  24. # Wrapped by billr@tekred on Mon Nov 30 17:25:15 1987
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f README -a "${1}" != "-c" ; then 
  27.   echo shar: Will not over-write existing file \"README\"
  28. else
  29. echo shar: Extracting \"README\" \(700 characters\)
  30. sed "s/^X//" >README <<'END_OF_README'
  31. XThe goal of this game is to move down the largest piece to the bottom in 
  32. Xminimal number of movements.  It is known that the puzzle can be solved in 
  33. X86 movements.  To move a piece, point it by the mouse and press the left
  34. Xbutton, hold the left button until you move the mouse to an adjacent empty
  35. Xsquare.  Use the middle button to close the frame into the icon format.  If
  36. Xyou want to quit, press the right button.
  37. XThe game works on SUN workstation only.  It is tested in SUN 3/50.
  38. XSome ideas on setting up the interface were borrowed from the calctool program
  39. Xby Rich Burridge.  Have fun.
  40. X                                    Jiang-Hsing Chu
  41. X                                    jchu@mimsy.umd.edu
  42. END_OF_README
  43. if test 700 -ne `wc -c <README`; then
  44.     echo shar: \"README\" unpacked with wrong size!
  45. fi
  46. # end of overwriting check
  47. fi
  48. if test -f Makefile -a "${1}" != "-c" ; then 
  49.   echo shar: Will not over-write existing file \"Makefile\"
  50. else
  51. echo shar: Extracting \"Makefile\" \(146 characters\)
  52. sed "s/^X//" >Makefile <<'END_OF_Makefile'
  53. X
  54. Xpuzzletool:       puzzletool.o
  55. X       cc -g -o puzzletool puzzletool.o -lsuntool -lsunwindow -lpixrect
  56. X
  57. Xpuzzletool.o:     puzzletool.c puzzletool.h
  58. END_OF_Makefile
  59. if test 146 -ne `wc -c <Makefile`; then
  60.     echo shar: \"Makefile\" unpacked with wrong size!
  61. fi
  62. # end of overwriting check
  63. fi
  64. if test -f puzzletool.c -a "${1}" != "-c" ; then 
  65.   echo shar: Will not over-write existing file \"puzzletool.c\"
  66. else
  67. echo shar: Extracting \"puzzletool.c\" \(19087 characters\)
  68. sed "s/^X//" >puzzletool.c <<'END_OF_puzzletool.c'
  69. X#include "puzzletool.h"
  70. X
  71. Xvoid canvas_proc() ;
  72. X
  73. XCanvas canvas, rcanvas ;
  74. XCursor main_cursor ;
  75. XEvent event ;
  76. XFrame frame ;
  77. XIcon puzzletool_icon ;
  78. XPanel panel ;
  79. XPanel_item display_item ;
  80. Xstruct Pixfont *nfont ;
  81. XPixwin *cpw ;
  82. X
  83. Xshort piece0_image[] = {
  84. X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
  85. X */
  86. X    0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFE,0x0000,0x0000,
  87. X    0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
  88. X    0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
  89. X    0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
  90. X    0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
  91. X    0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
  92. X    0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
  93. X    0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
  94. X    0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
  95. X    0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
  96. X    0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
  97. X    0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
  98. X    0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
  99. X    0x7BBB,0xBBBA,0x0000,0x0000,0x6EEE,0xEEEE,0x0000,0x0000,
  100. X    0x7777,0x7776,0x0000,0x0000,0x5DDD,0xDDDE,0x0000,0x0000,
  101. X    0x7FFF,0xFFFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  102. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  103. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  104. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  105. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  106. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  107. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  108. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  109. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  110. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  111. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  112. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  113. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  114. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  115. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  116. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  117. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
  118. X} ;
  119. Xmpr_static(piece0_pr,64,64,1,piece0_image) ;
  120. X
  121. Xshort piece1_image[] = {
  122. X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
  123. X */
  124. X    0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFE,0x0000,0x0000,
  125. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  126. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  127. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  128. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  129. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  130. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  131. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  132. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  133. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  134. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  135. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  136. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  137. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  138. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  139. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  140. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  141. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  142. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  143. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  144. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  145. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  146. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  147. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  148. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  149. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  150. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  151. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  152. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  153. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  154. X    0x6AAA,0xAAAA,0x0000,0x0000,0x5555,0x5556,0x0000,0x0000,
  155. X    0x7FFF,0xFFFE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
  156. X} ;
  157. Xmpr_static(piece1_pr,64,64,1,piece1_image) ;
  158. X
  159. Xshort piece2_image[] = {
  160. X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
  161. X */
  162. X    0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFF,0xFFFF,0xFFFE,
  163. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  164. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  165. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  166. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  167. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  168. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  169. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  170. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  171. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  172. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  173. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  174. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  175. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  176. X    0x6AAA,0xAAAA,0xAAAA,0xAAAA,0x5555,0x5555,0x5555,0x5556,
  177. X    0x7FFF,0xFFFF,0xFFFF,0xFFFE,0x0000,0x0000,0x0000,0x0000,
  178. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  179. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  180. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  181. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  182. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  183. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  184. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  185. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  186. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  187. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  188. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  189. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  190. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  191. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  192. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  193. X    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
  194. X} ;
  195. Xmpr_static(piece2_pr,64,64,1,piece2_image) ;
  196. X
  197. Xshort piece3_image[] = {
  198. X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
  199. X */
  200. X    0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFF,0xFFFF,0xFFFE,
  201. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  202. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  203. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  204. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  205. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  206. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  207. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  208. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  209. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  210. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  211. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  212. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  213. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  214. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  215. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  216. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  217. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  218. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  219. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  220. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  221. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  222. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  223. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  224. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  225. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  226. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  227. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  228. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  229. X    0x4444,0x4444,0x4444,0x4446,0x5111,0x1111,0x1111,0x1112,
  230. X    0x4888,0x8888,0x8888,0x888A,0x6222,0x2222,0x2222,0x2222,
  231. X    0x7FFF,0xFFFF,0xFFFF,0xFFFE,0x0000,0x0000,0x0000,0x0000
  232. X} ;
  233. Xmpr_static(piece3_pr,64,64,1,piece3_image) ;
  234. X
  235. Xshort icon_image[] = {
  236. X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
  237. X */
  238. X    0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
  239. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  240. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  241. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  242. X    0xC000,0xFF00,0x0007,0xC003,0xC003,0xFF80,0x000F,0xE003,
  243. X    0xC007,0x83C0,0x001F,0xF003,0xC00E,0x00E0,0x003F,0xF803,
  244. X    0xC018,0x0070,0x003F,0xF803,0xC038,0x0038,0x003F,0xF803,
  245. X    0xC030,0x0018,0x003F,0xF803,0xC070,0x001C,0x003F,0xF803,
  246. X    0xC060,0x000C,0x001F,0xF003,0xC000,0x000C,0x001F,0xF003,
  247. X    0xC000,0x000C,0x001F,0xF003,0xC000,0x000C,0x001F,0xE003,
  248. X    0xC000,0x000C,0x001F,0xE003,0xC000,0x001C,0x000F,0xE003,
  249. X    0xC000,0x0018,0x000F,0xE003,0xC000,0x0038,0x000F,0xE003,
  250. X    0xC000,0x0070,0x000F,0xC003,0xC000,0x00E0,0x000F,0xC003,
  251. X    0xC000,0x03C0,0x000F,0xC003,0xC000,0x3F80,0x000F,0xC003,
  252. X    0xC000,0x3E00,0x000F,0xC003,0xC000,0x3000,0x0007,0x8003,
  253. X    0xC000,0x3000,0x0007,0x8003,0xC000,0x3000,0x0007,0x8003,
  254. X    0xC000,0x3000,0x0007,0x8003,0xC000,0x3000,0x0007,0x8003,
  255. X    0xC000,0x3000,0x0007,0x0003,0xC000,0x3000,0x0007,0x0003,
  256. X    0xC000,0x3000,0x0007,0x0003,0xC000,0x3000,0x0003,0x0003,
  257. X    0xC000,0x3000,0x0003,0x0003,0xC000,0x3000,0x0002,0x0003,
  258. X    0xC000,0x3000,0x0002,0x0003,0xC000,0x3000,0x0002,0x0003,
  259. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  260. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x3800,0x0007,0x0003,
  261. X    0xC000,0x7C00,0x001F,0xC003,0xC000,0xFE00,0x001F,0xC003,
  262. X    0xC000,0xFE00,0x003F,0xE003,0xC000,0xFE00,0x003F,0xE003,
  263. X    0xC000,0x7C00,0x003F,0xE003,0xC000,0x3800,0x001F,0xC003,
  264. X    0xC000,0x0000,0x001F,0xC003,0xC000,0x0000,0x0007,0x0003,
  265. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  266. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  267. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  268. X    0xC000,0x0000,0x0000,0x0003,0xC000,0x0000,0x0000,0x0003,
  269. X    0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
  270. X} ;
  271. Xmpr_static(icon_pixrect,64,64,1,icon_image) ;
  272. X
  273. Xint ncolumn,column ;            /* Column number of key pressed. */
  274. Xint m,n ;               /* mouse and index */
  275. Xint nrow,row ;               /* Row number of key pressed. */
  276. Xint step=0;
  277. X
  278. X
  279. Xint board[7][6]= {
  280. X        {-2,-2,-2,-2,-2,-2}, {-2,4,9,9,5,-2}, {-2,4,9,9,5,-2}, 
  281. X        {-2,6,8,8,7,-2}, {-2,6,0,1,7,-2},
  282. X        {-2,-1,2,3,-1,-2}, {-2,-2,-2,-2,-2,-2}
  283. X};
  284. Xint pieces[10][5] = {      
  285. X    {0,2,4,1,1}, {0,3,4,1,1}, {0,2,5,1,1}, {0,3,5,1,1},
  286. X        {1,1,1,1,2}, {1,4,1,1,2}, {1,1,3,1,2}, {1,4,3,1,2},
  287. X        {2,2,3,2,1},{3,2,1,2,2}
  288. X} ;
  289. X
  290. Xchar display[MAXLINE] ;             /* Current calculator display. */
  291. X
  292. X
  293. Xmain(argc,argv)
  294. Xint argc ;
  295. Xchar *argv[] ;
  296. X
  297. X{
  298. X  nfont = pf_open(NORMALFONT) ;     /* Open normal sized font. */
  299. X  puzzletool_icon = icon_create(ICON_WIDTH,64,
  300. X                              ICON_IMAGE,&icon_pixrect,
  301. X                              0) ;
  302. X
  303. X  frame = window_create((Window) 0, FRAME,
  304. X                        FRAME_ICON, puzzletool_icon,
  305. X                        FRAME_SHOW_LABEL, FALSE,
  306. X                        FRAME_SUBWINDOWS_ADJUSTABLE, FALSE,
  307. X                        FRAME_NO_CONFIRM, FALSE,
  308. X                        WIN_TOP_MARGIN, DISPLAY,
  309. X                        WIN_ROW_HEIGHT, PIECE_H,
  310. X                        WIN_COLUMN_WIDTH, PIECE_W,
  311. X                        WIN_ROWS, PIECE_ROWS,
  312. X                        WIN_COLUMNS, PIECE_COLS,
  313. X                        FRAME_ARGS, argc,argv,
  314. X                        0) ;
  315. X
  316. X  panel = window_create(frame, PANEL,
  317. X                        WIN_CONSUME_KBD_EVENTS, WIN_ASCII_EVENTS, 0,
  318. X                        WIN_HEIGHT, DISPLAY,
  319. X                        0) ;
  320. X
  321. X  canvas = window_create(frame,CANVAS,
  322. X                         WIN_BELOW,panel,
  323. X                         WIN_WIDTH,TOTAL_WIDTH,
  324. X                         WIN_HEIGHT,TOTAL_HEIGHT,
  325. X                         WIN_FONT,nfont,
  326. X                         WIN_EVENT_PROC,canvas_proc,
  327. X                         0) ;
  328. X  WINDOW_SET(canvas,WIN_CONSUME_KBD_EVENT,WIN_ASCII_EVENTS,0) ;
  329. X
  330. X  display_item = panel_create_item(panel,PANEL_MESSAGE,
  331. X                                PANEL_LABEL_X,10,
  332. X                                PANEL_LABEL_Y,DISPLAY-15,
  333. X                                PANEL_LABEL_FONT,nfont,
  334. X                                PANEL_LABEL_STRING,"",
  335. X                                0) ;
  336. X  cpw = canvas_pixwin(canvas) ;
  337. X  main_cursor = window_get(canvas,WIN_CURSOR) ;
  338. X
  339. X  make_canvas() ;            /* Draw the calculators pieces. */
  340. X  window_fit(frame) ;
  341. X  window_main_loop(frame) ;
  342. X  exit(0) ;
  343. X}
  344. X
  345. X/*ARGSUSED*/
  346. Xstatic void
  347. Xcanvas_proc(win,event,arg)
  348. XCanvas  win ;
  349. XEvent *event ;
  350. Xcaddr_t arg ;
  351. X
  352. X{
  353. X  if (event_is_button(event) && event_is_down(event))
  354. X    {
  355. X      switch (event_id(event))
  356. X        {
  357. X          case MS_LEFT   : column = event_x(event) / PIECE_W ;
  358. X                           row = event_y(event) / PIECE_H ;
  359. X                           n = board[row+1][column+1] ;  m=0;
  360. X                           return;
  361. X          case MS_MIDDLE : WINDOW_SET(frame,FRAME_CLOSED,TRUE,0);
  362. X                           return;
  363. X          case MS_RIGHT  : WINDOW_DESTROY(frame);
  364. X          default:         return ;
  365. X        }
  366. X   }
  367. X  if (event_is_button(event) && event_is_up(event) && n>=0)
  368. X    {
  369. X      switch (event_id(event))
  370. X        {
  371. X          case MS_LEFT   : ncolumn = event_x(event) / PIECE_W;
  372. X                           nrow = event_y(event) / PIECE_H ;
  373. X                           if(board[nrow+1][ncolumn+1]!=-1)return ;
  374. X                           if(ncolumn>column) m=0;
  375. X                           if(nrow<row)m=1;
  376. X                           if(ncolumn<column) m=2;
  377. X                           if(nrow>row)m=3;
  378. X                           do_move();
  379. X          case MS_MIDDLE : 
  380. X          case MS_RIGHT  : 
  381. X          default:         return ;
  382. X        }
  383. X   }
  384. X  return ;
  385. X
  386. X}
  387. X
  388. Xdisplay_test(display)       /* Output result to calculator display. */
  389. Xchar display[MAXLINE];
  390. X{
  391. X  PANEL_SET(display_item,PANEL_LABEL_STRING,display,0) ;
  392. X}
  393. X
  394. Xmake_canvas()
  395. X{
  396. X  int n,x ;
  397. X  char pstr[10] ;
  398. X
  399. X  pw_writebackground(cpw,0,0,TOTAL_WIDTH,TOTAL_HEIGHT,PIX_CLR) ;
  400. X  for(n=0;n<4;++n)
  401. X  pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece0_pr,0,0) ;
  402. X  for(n=4;n<8;++n)
  403. X  pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece1_pr,0,0) ;
  404. X  n=8;
  405. X  pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece2_pr,0,0) ;
  406. X  n=9;
  407. X  pw_write(cpw,(pieces[n][PX]-1)*PIECE_W, (pieces[n][PY]-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece3_pr,0,0) ;
  408. X}
  409. X
  410. Xdo_move()
  411. X{
  412. X   int ox,oy,nx,ny;
  413. X
  414. X   ox=pieces[n][PX];
  415. X   oy=pieces[n][PY];
  416. X   switch(n){
  417. X      case 0:
  418. X      case 1:
  419. X      case 2:
  420. X      case 3: switch(m){
  421. X               case 0: if(board[ny=oy][nx=ox+1]==-1)break;
  422. X                       return;
  423. X               case 1: if(board[ny=oy-1][nx=ox]==-1)break;
  424. X                       return;
  425. X               case 2: if(board[ny=oy][nx=ox-1]==-1)break;
  426. X                       return;
  427. X               case 3: if(board[ny=oy+1][nx=ox]==-1)break;
  428. X                       return;
  429. X              }
  430. X              break;
  431. X      case 4:
  432. X      case 5:
  433. X      case 6:
  434. X      case 7: switch(m){
  435. X               case 0: if(board[oy][ox+1]==-1&&board[oy+1][ox+1]==-1){nx=ox+1;ny=oy;break;}
  436. X                       return;
  437. X               case 1: if(board[oy-1][ox]==-1){nx=ox;ny=oy-1;break;}
  438. X                       return;
  439. X               case 2: if(board[oy][ox-1]==-1&&board[oy+1][ox-1]==-1){nx=ox-1;ny=oy;break;}
  440. X                       return;
  441. X               case 3: if(board[oy+2][ox]==-1){nx=ox;ny=oy+1;break;}
  442. X                       return;
  443. X              }
  444. X              break;
  445. X      case 8: switch(m){
  446. X               case 0: if(board[oy][ox+2]==-1){nx=ox+1;ny=oy;break;}
  447. X                       return;
  448. X               case 1: if(board[oy-1][ox]==-1&&board[oy-1][ox+1]==-1){nx=ox;ny=oy-1;break;}
  449. X                       return;
  450. X               case 2: if(board[oy][ox-1]==-1){nx=ox-1;ny=oy;break;}
  451. X                       return;
  452. X               case 3: if(board[oy+1][ox]==-1&&board[oy+1][ox+1]==-1){nx=ox;ny=oy+1;break;}
  453. X                       return;
  454. X              }
  455. X              break;
  456. X      case 9: switch(m){
  457. X               case 0: if(board[oy][ox+2]==-1&&board[oy+1][ox+2]==-1){nx=ox+1;ny=oy;break;}
  458. X                       return;
  459. X               case 1: if(board[oy-1][ox]==-1&&board[oy-1][ox+1]==-1){nx=ox;ny=oy-1;break;}
  460. X                       return;
  461. X               case 2: if(board[oy][ox-1]==-1&&board[oy+1][ox-1]==-1){nx=ox-1;ny=oy;break;}
  462. X                       return;
  463. X               case 3: if(board[oy+2][ox]==-1&&board[oy+2][ox+1]==-1){nx=ox;ny=oy+1;break;}
  464. X                       return;
  465. X              }
  466. X              break;
  467. X                         
  468. X         }
  469. X   itos(++step,display);
  470. X   display_test(display);
  471. X      pieces[n][PX]=nx;pieces[n][PY]=ny;
  472. X      switch(n){
  473. X         case 0:
  474. X         case 1:
  475. X         case 2:
  476. X         case 3: board[oy][ox]= -1;
  477. X                 board[ny][nx]=n;
  478. X                 pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
  479. X  pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece0_pr,0,0) ;
  480. X                 break;
  481. X         case 4:
  482. X         case 5:
  483. X         case 6:
  484. X         case 7: board[oy][ox]=board[oy+1][ox]= -1;
  485. X                 board[ny][nx]=board[ny+1][nx]=n;
  486. X                 pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
  487. X  pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece1_pr,0,0) ;
  488. X                 break;
  489. X         case 8: board[oy][ox]=board[oy][ox+1]= -1;
  490. X                 board[ny][nx]=board[ny][nx+1]=n;
  491. X                 pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
  492. X  pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece2_pr,0,0) ;
  493. X                 break;
  494. X         case 9: board[oy][ox]=board[oy][ox+1]=board[oy+1][ox]=board[oy+1][ox+1]= -1;
  495. X                 board[ny][nx]=board[ny][nx+1]=board[ny+1][nx]=board[ny+1][nx+1]=n;
  496. X                 pw_writebackground(cpw,(ox-1)*PIECE_W,(oy-1)*PIECE_H,pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_CLR);
  497. X  pw_write(cpw,(nx-1)*PIECE_W, (ny-1)*PIECE_H, pieces[n][PDX]*PIECE_W,pieces[n][PDY]*PIECE_H,PIX_SRC,&piece3_pr,0,0) ;
  498. X                       break;
  499. X      }
  500. X}
  501. X
  502. Xitos(i,c)
  503. Xint i;
  504. Xchar *c;
  505. X
  506. X{  int j;
  507. X   char t;
  508. X
  509. X   c[0]='\0';
  510. X   for(j=1;i>0;j++){
  511. X      c[j]=i%10+'0';
  512. X      i/=10;
  513. X   }
  514. X   for(i=0;i<j/2;++i){
  515. X      t=c[i];
  516. X      c[i]=c[j-1-i];
  517. X      c[j-1-i]=t;
  518. X   }
  519. X}
  520. END_OF_puzzletool.c
  521. if test 19087 -ne `wc -c <puzzletool.c`; then
  522.     echo shar: \"puzzletool.c\" unpacked with wrong size!
  523. fi
  524. # end of overwriting check
  525. fi
  526. if test -f puzzletool.h -a "${1}" != "-c" ; then 
  527.   echo shar: Will not over-write existing file \"puzzletool.h\"
  528. else
  529. echo shar: Extracting \"puzzletool.h\" \(1527 characters\)
  530. sed "s/^X//" >puzzletool.h <<'END_OF_puzzletool.h'
  531. X
  532. X#include <stdio.h>
  533. X#include <strings.h>
  534. X#include <ctype.h>
  535. X
  536. X#include <suntool/sunview.h>
  537. X#include <suntool/canvas.h>
  538. X#include <suntool/panel.h>
  539. X
  540. Xchar *sprintf() ;
  541. X
  542. X#define  FGETS          (void) fgets     /* To make lint happy. */
  543. X#define  FPRINTF        (void) fprintf
  544. X#define  IOCTL          (void) ioctl
  545. X#define  PANEL_SET      (void) panel_set
  546. X#define  READ           (void) read
  547. X#define  SPRINTF        (void) sprintf
  548. X#define  SSCANF         (void) sscanf
  549. X#define  STRCAT         (void) strcat
  550. X#define  STRCPY         (void) strcpy
  551. X#define  STRNCAT        (void) strncat
  552. X#define  STRNCPY            (void) strncpy
  553. X#define  WINDOW_DESTROY     (void) window_destroy
  554. X#define  WINDOW_READ_EVENT  (void) window_read_event
  555. X#define  WINDOW_SET         (void) window_set
  556. X
  557. X#define  NORMALFONT     "/usr/lib/fonts/fixedwidthfonts/screen.r.12"
  558. X
  559. X#define  PIECE_COLS    4                /* No of columns of pieces. */
  560. X#define  PIECE_H       32               /* Number of pixels for height. */
  561. X#define  PIECE_ROWS    5                /* No of rows of pieces. */
  562. X#define  PIECE_W       32               /* No of pixels for width. */
  563. X#define  DISPLAY        30               /* Calculators numerical display. */
  564. X
  565. X#define  EQUAL          !strcmp          /* For character comparisons. */
  566. X#define  MAXLINE        80               /* Length of character strings. */
  567. X#define  TOTAL_HEIGHT   (PIECE_ROWS * PIECE_H)
  568. X#define  TOTAL_WIDTH    (PIECE_COLS * PIECE_W)
  569. X#define  PTYPE        0
  570. X#define  PX        1
  571. X#define  PY        2
  572. X#define  PDX        3
  573. X#define  PDY        4
  574. END_OF_puzzletool.h
  575. if test 1527 -ne `wc -c <puzzletool.h`; then
  576.     echo shar: \"puzzletool.h\" unpacked with wrong size!
  577. fi
  578. # end of overwriting check
  579. fi
  580. echo shar: End of shell archive.
  581. exit 0
  582.